🚀 实战指南:VPS + Frp + Docker 打造高速隧道
2025年11月28日
本教程旨在解决以下痛点: 1. 家庭宽带无公网 IP 或 80/443 端口被封,无法直接建站。 2. 海外访问国内家庭服务速度慢,Cloudflare 免费版在国内体验不佳。 3. 无需备案,利用高性能回国线路 VPS 实现低延迟访问。
# Frp 高速隧道

📖 简介
本教程旨在解决以下痛点:
- 家庭宽带无公网 IP 或 80/443 端口被封,无法直接建站。
- 海外访问国内服务速度慢,Cloudflare 免费版在国内体验不佳。
- 无需备案,利用高性能线路 VPS 实现低延迟访问。
架构方案:
用户 (HTTPS) -> VPS (Frp 服务端) -> 加密隧道 -> 家庭服务器 (Frp 客户端) -> 本地 Nginx (解密/响应)
🛠️ 准备工作
- VPS 一台: 推荐 ClawCloud(香港/新加坡/日本),线路优化且带宽大。
- 家庭服务器: 需安装 Docker 和 Nginx。
- 域名一个: 托管在 Cloudflare/阿里云等,用于申请 SSL 证书。
- 生成 Token: 在终端运行
openssl rand -hex 16生成一个连接密码。
第一步:服务端部署 (ClawCloud VPS)
环境: Ubuntu / Debian目标: 安装 frps,开启 HTTPS 监听,配置开机自启。
1. 下载并安装
# 下载最新版 Frp (请去 GitHub Release 页面确认最新版本号)
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
# 解压并安装
tar -zxvf frp_0.58.1_linux_amd64.tar.gz
sudo mv frp_0.58.1_linux_amd64/frps /usr/local/bin/
sudo chmod +x /usr/local/bin/frps
# 创建配置目录
sudo mkdir -p /etc/frp
2. 配置文件 (/etc/frp/frps.toml)
Ini, TOML
# frps 内部通讯端口
bindPort = 7000
# 【关键】对外监听 HTTPS 端口,接收公网 443 流量
vhostHTTPSPort = 443
# 身份验证 (请替换为你自己的)
auth.method = "token"
auth.token = "a1b2c3d4e5f678901234567890abcdef"
# 仪表盘配置 (可选)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"
3. 配置 Systemd 开机自启 (/etc/systemd/system/frps.service)
Ini, TOML
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
[Install]
WantedBy=multi-user.target
4. 启动服务与防火墙
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable frps --now
# 开放系统防火墙
sudo ufw allow 7000/tcp
sudo ufw allow 443/tcp
sudo ufw allow 7500/tcp
⚠️ 注意: 别忘了去 VPS 厂商的网页控制台(安全组)里也放行上述端口!
第二步:客户端部署 (家庭服务器)
环境: Docker目标: 通过 Docker 部署 frpc,透传 HTTPS 流量给宿主机 Nginx。
1. 配置文件 (~/frp/frpc.toml)
Ini, TOML
# 填写 VPS 的公网 IP
serverAddr = "1.2.3.4"
serverPort = 7000
# 必须与服务端一致
auth.method = "token"
auth.token = "a1b2c3d4e5f678901234567890abcdef"
# 【关键】开启 TLS 加密,防止过墙时连接被重置 (Connection reset)
transport.tls.enable = true
# --- 转发规则 ---
[[proxies]]
name = "home_web"
type = "https" # https 模式表示透传加密流量,不进行解密
customDomains = ["www.yourdomain.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:443" # 指向宿主机 Nginx 监听的 SSL 端口
2. Docker Compose 文件 (~/frp/docker-compose.yml)
version: '3.8'
services:
frpc:
image: snowdreamtech/frpc:latest
container_name: frpc
restart: always
# 【关键】使用 host 模式,让容器能直接访问宿主机的 Nginx 端口
network_mode: "host"
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
3. 启动客户端
cd ~/frp
docker compose up -d
# 查看日志确认连接成功 (看到 "start proxy success" 即为成功)
docker logs -f frpc
第三步:本地 Nginx 配置 (SSL 终点)
由于是 HTTPS 透传,SSL 证书必须配置在家庭服务器的 Nginx 上。
Nginx 配置示例
server {
# 监听本地 443 (运营商封锁外网 443 不影响内网监听)
listen 443 ssl;
server_name www.yourdomain.com;
# SSL 证书路径
ssl_certificate /etc/nginx/cert/yourdomain.pem;
ssl_certificate_key /etc/nginx/cert/yourdomain.key;
location / {
root /var/www/html;
index index.html;
}
}
💡 提示: 推荐使用
acme.sh或Certbot配合 DNS API 方式申请证书,这样无需 80 端口即可自动续期。
第四步:DNS 解析
前往你的域名服务商(Cloudflare/阿里云):
- 添加一条 A 记录。
- 主机记录:
www - 记录值:ClawCloud VPS 的公网 IP。
- (如果是 Cloudflare):关闭小黄云 (Proxy Status: DNS Only),让流量直连 VPS。
🚑 常见问题排查 (Troubleshooting)
Q1: 启动报错 Connection lost before handshake?
- 原因1: VPS 和家庭服务器系统时间不一致。请同步时间。
- 原因2: 被 GFW 识别阻断。请确保
frpc.toml中开启了transport.tls.enable = true。
Q2: 网页访问 502 Bad Gateway?
- Frp 连接正常,但找不到本地 Nginx。
- 检查 Docker 是否开启了
network_mode: "host"。 - 检查
localAddr端口是否与 Nginxlisten端口一致。
Q3: Dashboard (7500端口) 打不开?
- 检查
frps.toml中是否配置了webServer.addr = "0.0.0.0"。 - 重点检查: 阿里云/ClawCloud 网页控制台的安全组是否放行了 7500 端口。
Q4: 证书报错 / 隐私错误?
- 确认 Nginx 配置了正确的证书,且域名与访问域名一致。Frp 只是搬运工,证书错误是 Nginx 的问题。